উদাহরণ সহ Auditing পরিচালনা

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC) Spring JDBC এবং Auditing |
69
69

স্প্রিং জেডিবিসি (Spring JDBC) ব্যবহার করে Auditing পরিচালনা করা যায়, যা সাধারণত ডেটাবেসে রেকর্ড করার সময় ট্র্যাকিং তথ্য যেমন created_by, created_at, updated_by, updated_at ইত্যাদি সংরক্ষণ করে। এই তথ্যগুলো সাধারণত একটি সিস্টেমে কিভাবে রেকর্ড তৈরি হয়েছে, কিভাবে আপডেট হয়েছে, এবং কে এটি তৈরি বা আপডেট করেছে, তা ট্র্যাক করতে ব্যবহৃত হয়। স্প্রিং জেডিবিসি এর মাধ্যমে auditing সহজে পরিচালনা করা যায়।

Auditing কি?

Auditing হল একটি প্রক্রিয়া যার মাধ্যমে ডেটাবেসে ডেটা তৈরির বা পরিবর্তনের সময়ের সাথে সম্পর্কিত অতিরিক্ত তথ্য (যেমন ব্যবহারকারীর নাম, সময় ইত্যাদি) রেকর্ড করা হয়। এটি সাধারণত সিকিউরিটি, কমপ্লায়েন্স এবং ডেটা ট্র্যাকিংয়ের জন্য ব্যবহৃত হয়।

উদাহরণ সহ Auditing পরিচালনা

ধরা যাক, আমরা একটি Employee টেবিল পরিচালনা করছি এবং আমরা চাই যে যখন একটি Employee রেকর্ড তৈরি হয় বা আপডেট হয়, তখন সেই রেকর্ডে created_by, created_at, updated_by, এবং updated_at এর মতো ফিল্ডস সংরক্ষণ করা হোক।

1. ডেটাবেস স্কিমা উদাহরণ:

CREATE TABLE Employee (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    position VARCHAR(50),
    created_by VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_by VARCHAR(50),
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

এখানে:

  • created_by: রেকর্ডটি কে তৈরি করেছে তা ট্র্যাক করবে।
  • created_at: রেকর্ডটি কখন তৈরি হয়েছে তা ট্র্যাক করবে।
  • updated_by: রেকর্ডটি কে আপডেট করেছে তা ট্র্যাক করবে।
  • updated_at: রেকর্ডটি কখন আপডেট হয়েছে তা ট্র্যাক করবে।

2. ডোমেইন ক্লাস (Employee):

import java.sql.Timestamp;

public class Employee {
    private int id;
    private String name;
    private String position;
    private String createdBy;
    private Timestamp createdAt;
    private String updatedBy;
    private Timestamp updatedAt;

    // Getters and Setters
}

3. RowMapper (EmployeeRowMapper):

Employee ক্লাসের জন্য একটি RowMapper তৈরি করা হবে যা SQL কুয়েরি থেকে প্রাপ্ত রেকর্ডগুলোকে Employee অবজেক্টে রূপান্তর করবে।

import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;

public class EmployeeRowMapper implements RowMapper<Employee> {
    @Override
    public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
        Employee employee = new Employee();
        employee.setId(rs.getInt("id"));
        employee.setName(rs.getString("name"));
        employee.setPosition(rs.getString("position"));
        employee.setCreatedBy(rs.getString("created_by"));
        employee.setCreatedAt(rs.getTimestamp("created_at"));
        employee.setUpdatedBy(rs.getString("updated_by"));
        employee.setUpdatedAt(rs.getTimestamp("updated_at"));
        return employee;
    }
}

4. JdbcTemplate ব্যবহার করে Auditing:

JdbcTemplate ক্লাসের সাহায্যে, যখন একটি Employee রেকর্ড তৈরি বা আপডেট করা হবে, তখন আমরা created_by, updated_by, created_at, এবং updated_at এর মান সঠিকভাবে সন্নিবেশ বা আপডেট করব।

4.1. রেকর্ড তৈরি করার সময় auditing:

import org.springframework.jdbc.core.JdbcTemplate;

import java.util.Map;

public class EmployeeDao {
    private JdbcTemplate jdbcTemplate;

    public EmployeeDao(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void addEmployee(Employee employee, String createdBy) {
        String sql = "INSERT INTO Employee (name, position, created_by, created_at) " +
                     "VALUES (?, ?, ?, CURRENT_TIMESTAMP)";
        jdbcTemplate.update(sql, employee.getName(), employee.getPosition(), createdBy);
    }
}

এখানে:

  • created_by: রেকর্ড তৈরি করার সময় আমরা বর্তমানে লগ ইন করা ব্যবহারকারীর নাম অথবা যাকে দিয়ে রেকর্ডটি তৈরি হচ্ছে, তার নাম সংরক্ষণ করব।
  • created_at: এটি SQL তে CURRENT_TIMESTAMP দ্বারা স্বয়ংক্রিয়ভাবে নির্ধারিত হবে।

4.2. রেকর্ড আপডেট করার সময় auditing:

public void updateEmployee(Employee employee, String updatedBy) {
    String sql = "UPDATE Employee SET name = ?, position = ?, updated_by = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?";
    jdbcTemplate.update(sql, employee.getName(), employee.getPosition(), updatedBy, employee.getId());
}

এখানে:

  • updated_by: রেকর্ডটি যে ব্যবহারকারী আপডেট করেছেন তার নাম সংরক্ষণ করা হচ্ছে।
  • updated_at: এটি SQL তে CURRENT_TIMESTAMP দ্বারা আপডেট হবে।

5. উদাহরণ সহ ব্যবহার:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class Main {
    public static void main(String[] args) {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/yourdatabase");
        dataSource.setUsername("root");
        dataSource.setPassword("password");

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        EmployeeDao employeeDao = new EmployeeDao(jdbcTemplate);

        // Adding a new employee
        Employee newEmployee = new Employee();
        newEmployee.setName("John Doe");
        newEmployee.setPosition("Developer");

        employeeDao.addEmployee(newEmployee, "admin");

        // Updating the employee
        newEmployee.setPosition("Senior Developer");
        employeeDao.updateEmployee(newEmployee, "admin");
    }
}

সারাংশ:

  • Auditing ব্যবস্থাপনা করতে created_by, updated_by, created_at, এবং updated_at ফিল্ডগুলো ডেটাবেস টেবিলের অংশ হিসেবে ব্যবহার করা হয়।
  • JdbcTemplate এবং SQL কুয়েরি এর মাধ্যমে auditing ডেটা সন্নিবেশ বা আপডেট করা হয়।
  • CURRENT_TIMESTAMP এবং CURRENT_USER() ব্যবহার করে সময় এবং ব্যবহারকারীর তথ্য স্বয়ংক্রিয়ভাবে নির্ধারণ করা হয়।
Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion